// 执行一段字符串,返回运行结果
export const cEval = param => {
  try {
    // 一个变量指向Function，防止有些前端编译工具报错
    const Fun = Function
    return new Fun('return ' + param)()
  } catch (error) {
    return {
      status: 'failed',
      error
    }
  }
}

// 深度克隆数据
export const deepCopy = function(obj) {
  const result = obj.constructor === Array ? [] : {}
  const keys = Object.keys(obj)
  let key = null
  let temp = null
  for (let i = 0; i < keys.length; i++) {
    key = keys[i]
    temp = obj[key]
    if (temp && typeof temp === 'object') {
      result[key] = deepCopy(temp)
    } else {
      result[key] = temp
    }
  }
  return result
}

// 生成一个唯一的id
export const uniqueId = function() {
  return Math.random().toString(36).substring(2, 15)
}

// 节流函数
// 接受两个参数：func 表示要执行的函数，
// delay 表示延迟时间（以毫秒为单位）。
export const debounce = function(func, wait = 50) {
  // 缓存一个定时器id
  let timer = null
  // 这里返回的函数时每次用户实际调用的防抖函数
  // 如果已经设定过定时器了就清空上一次的定时器
  // 开始一个定时器，延迟执行用户传入的方法
  return function(...args) {
    if (timer) clearTimeout(timer)
    timer = setTimeout(() => {
      // 将实际的this和参数传入用户实际调用的函数
      func.apply(this, args)
    }, wait)
  }
}

// 将毫秒转换成时年月日时分秒
export const formatTime = function(milliseconds) {
  const date = new Date(milliseconds)
  const year = date.getFullYear() // 获取当前年份
  const mon = date.getMonth() + 1 // 获取当前月份
  const da = date.getDate() // 获取当前日
  const h = date.getHours() // 获取小时
  const m = date.getMinutes() // 获取分钟
  const s = date.getSeconds() // 获取秒
  return `${year}-${mon}-${da} ${h}:${m}:${s}`
}
// 将毫秒转换成时分秒
export const formatTime2 = function(milliseconds) {
  // 对小于1000毫秒的时间进行处理
  if (milliseconds < 1000) {
    milliseconds = 1000
  }
  // 计算小时、分钟和秒数
  const seconds = Math.floor((milliseconds / 1000) % 60)
  const minutes = Math.floor((milliseconds / (1000 * 60)) % 60)
  const hours = Math.floor((milliseconds / (1000 * 60 * 60)) % 24)
  // 创建时间字符串
  return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`
}
